package pshop;

import pshop.Artikel;
import pshop.db.DB;
import com.googlecode.objectify.annotation.Serialize;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Warenkorb implements Serializable
{
   private static final long serialVersionUID = 1432342343647L;

  @Serialize
  Map<Integer, Integer> artikel = new HashMap<Integer, Integer>();

   public void addArtikel(Integer artId)
   {
      if (!artikel.containsKey(artId))
         artikel.put(artId, 1);
      else
         artikel.put(artId, artikel.get(artId) + 1);
   }

   public void remove(Integer artId)
   {
      if (!artikel.containsKey(artId))
         return;
     if (artikel.get(artId) <= 1)
       delete(artId);
      else
         artikel.put(artId, artikel.get(artId) - 1);
   }

   public void delete(Integer artId)
   {
      artikel.remove(artId);
   }

   public void setAnzahl(Integer artId, Integer anz)
   {
      artikel.put(artId, anz);
   }

   public int getAnzahlArtikel()
   {
      int anz = 0;
      for (Integer key : artikel.keySet().toArray(new Integer[0]))
      {
         anz += artikel.get(key);
      }
      return anz;
   }

   public float getGesamtPreis()
   {
      float ges = 0f;
      for (Integer key : artikel.keySet().toArray(new Integer[0]))
      {
         ges += (float)artikel.get(key) * DB.getArtikelDef(key).getPreis();
      }
      return (float)Math.round(ges * 100f) / 100f;
   }

   @Override
   public boolean equals(Object o)
   {
      //if (!super.equals(o))
         return false;
      /*Warenkorb wk = (Warenkorb)o;
      for (Integer artId : artikel.keySet())
      {
         if (!artikel.get(artId).equals(wk.artikel.get(artId)))
            return false;
      }
      return true;*/
   }

   public List<Artikel> getArtikel()
   {
      List<Artikel> artikelList = new ArrayList<Artikel>();
      for (Integer artId : artikel.keySet())
      {
         Artikel atkl = new Artikel(DB.getArtikelDef(artId), artikel.get(artId));
         artikelList.add(atkl);
      }
      return artikelList;
   }

}